﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="DateTimeExtension.cs" company="Donga CS">
//   2011
// </copyright>
// <summary>
//   The DateTimeExtension.
// </summary>
// --------------------------------------------------------------------------------------------------------------------



using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

namespace DTTB.Common
{
    /// <summary>
    /// DateTimeExtension Helper Class
    /// </summary>
    public static class DateTimeExtension
    {
        /// <summary>
        /// MinDate property
        /// </summary>
        private static readonly DateTime MinDate = new DateTime(1900, 1, 1);

        /// <summary>
        /// MaxDate property
        /// </summary>
        private static readonly DateTime MaxDate = new DateTime(9999, 12, 31, 23, 59, 59, 999);

        /// <summary>
        /// Check Date IsValid
        /// </summary>
        /// <param name="target">
        /// The target.
        /// </param>
        /// <returns>
        /// bool values
        /// </returns>
        [DebuggerStepThrough]
        public static bool IsValid(this DateTime target)
        {
            return (target >= MinDate) && (target <= MaxDate);
        }


        public static DateTime ConvertDateTimeToMMDDYYYY(DateTime dateTime)
        {
            return Convert.ToDateTime(String.Format("{0:MM dd yyyy}", dateTime));
        }

        public static string ConvertStringDDMMYYYYToStringYYYYMMDD(string dateTimeDDMMYYYY)
        {
            string[] ngaythangnam = dateTimeDDMMYYYY.Split('/');

            string MMDDYYYY = ngaythangnam[2] + "-" + ngaythangnam[1] + "-" + ngaythangnam[0];

            return MMDDYYYY;
        }

        public static string ConvertStringMMDDYYYYToStringDDMMYYYY(string stringMMDDYYYY)
        {
            string stringDDMMYYYY;
            try
            {
                string thangngaynamShort = stringMMDDYYYY.Split(' ')[0];
                string[] thangngaynam = thangngaynamShort.Split('/');
               stringDDMMYYYY = thangngaynam[1] + "/" + thangngaynam[0] + "/" + thangngaynam[2];
            }
            catch (Exception)
            {

                stringDDMMYYYY="";
            }
            return stringDDMMYYYY;
        }

        public static DateTime ConvertStringDDMMYYYYToMMDDYYYY(string dateTimeDDMMYYYY)
        {
            string[] ngaythangnam = dateTimeDDMMYYYY.Split('/');

            string MMDDYYYY = ngaythangnam[1] + "/" + ngaythangnam[0] + "/" + ngaythangnam[2];

            return Convert.ToDateTime(MMDDYYYY);
        }

        public static DateTime ConvertStringDDMMYYYYToYYYYMMDD(string dateTimeDDMMYYYY)
        {
            string[] ngaythangnam = dateTimeDDMMYYYY.Split('/');

            string MMDDYYYY = ngaythangnam[2] + "-" + ngaythangnam[1] + "-" + ngaythangnam[0];

            return Convert.ToDateTime(MMDDYYYY);
        }

        public static DateTime ConvertStringDDMMYYYYToLastMMDDYYYY(string dateTimeDDMMYYYY)
        {
            string[] ngaythangnam = dateTimeDDMMYYYY.Split('/');

            string MMDDYYYY = ngaythangnam[1] + "/" + ngaythangnam[0] + "/" + ngaythangnam[2] + " 11:59:59 PM";

            return Convert.ToDateTime(MMDDYYYY);
        }

        //chuyển một ngày thành đầu ngày : '02/25/2012 08:09:60 AM' => '02/25/2012 00:00:00 AM'
        public static DateTime ConvertToFirstDate(DateTime dateTime)
        {
            string[] ThangNgayNam = dateTime.ToString().Split('/');

            string Thang = ThangNgayNam[0];
            string Ngay = ThangNgayNam[1];
            string Nam = ThangNgayNam[2].Split(' ')[0];

            string newDateString = Thang + "/" + Ngay + "/" + Nam + " 00:00:00 AM" ;

            return Convert.ToDateTime(newDateString);
        }

        //chuyển một ngày thành cuối ngày : '02/25/2012 08:09:60 AM' => '02/25/2012 11:59:59 PM'
        public static DateTime ConvertToLastDate(DateTime dateTime)
        {
            string[] ThangNgayNam = dateTime.ToString().Split('/');

            string Thang = ThangNgayNam[0];
            string Ngay = ThangNgayNam[1];
            string Nam = ThangNgayNam[2].Split(' ')[0];

            string newDateString = Thang + "/" + Ngay + "/" + Nam + " 11:59:59 PM";

            return Convert.ToDateTime(newDateString);
        }

        public static string ConvertDayOfWeek(int th) //th : thứ
        {
            if (th == 1) return "Thứ hai";
            if (th == 2) return "Thứ ba";
            if (th == 3) return "Thứ tư";
            if (th == 4) return "Thứ năm";
            if (th == 5) return "Thứ sáu";
            if (th == 6) return "Thứ bảy";
            if (th == 0) return "Chủ nhật";

            return string.Empty;
        }

        public static string ConvertDateTimeToDayOfWeek(DateTime datetime) //datetime : ngày bất kỳ
        {
            int th = Convert.ToInt32(datetime.DayOfWeek);

            if (th == 1) return "Thứ hai";
            if (th == 2) return "Thứ ba";
            if (th == 3) return "Thứ tư";
            if (th == 4) return "Thứ năm";
            if (th == 5) return "Thứ sáu";
            if (th == 6) return "Thứ bảy";
            if (th == 0) return "Chủ nhật";

            return string.Empty;
        }

        //Hàm tính chênh lệch thời gian (theo phút) giữa hai ngày
        public static int MinuteDifference(DateTime datetime1, DateTime datetime2)
        {
            return  Math.Abs((datetime1 - datetime2).Minutes);
        }

        //Hàm tính chênh lệch thời gian (theo giờ) giữa hai ngày
        public static int HourDifference(DateTime datetime1, DateTime datetime2)
        {
            return  Math.Abs((datetime1 - datetime2).Hours);
        }

        //Hàm tính chênh lệch thời gian (theo giây) giữa hai ngày
        public static int SecondDifference(DateTime datetime1, DateTime datetime2)
        {
           return  Math.Abs((datetime1 - datetime2).Seconds);
        }
    }
}
